package com.example.commons.redis;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

@Configuration
public class InitJedisPool {

    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int post;
//    @Value("${spring.redis.password}")
    private String password = null;

    @Bean("jedisPool")
    public JedisPool initJedisPool() {
        JedisPoolConfig config = new JedisPoolConfig();
        //资源池中最大连接数
        config.setMaxTotal(100);
        //资源池中最大空闲连接数
        config.setMaxIdle(100);
        //资源池确保的最少空闲连接数
        config.setMinIdle(10);
        //是否开启空闲检测
        config.setTestWhileIdle(true);
        //向资源池借用连接时是否做连接有效性检测（ping）。检测到的无效连接将会被移除。
        config.setTestOnBorrow(true);
        //向资源池归还连接时是否做连接有效性检测（ping）。检测到无效连接将会被移除。
        config.setTestOnReturn(true);
        //做空闲资源检测时，每次检测资源的个数。可根据自身应用连接数进行微调，如果设置为 -1，就是对所有连接做空闲监测。
        config.setNumTestsPerEvictionRun(-1);
        //不加此句会报错pool2 的bean已经注册
        config.setJmxEnabled(false);
        if (StringUtils.isNotBlank(password)) {
            return new JedisPool(config, host, post, 2000, password);
        } else {
            return new JedisPool(config, host, post, 2000);
        }
    }
}
